# -*- coding:utf-8 -*-
'''
Created on 22.11.2009

@author: yserdyukov
'''
from django import template
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
register = template.Library()


class PaginatorNode(template.Node):
    def __init__(self, token=''):
        self.token = token
        self.page_name = 'page'
        if token:
            self.page_name = '%s_%s' % (self.page_name, self.token)
    def render(self, context):
        if 'request' in context:
            query = context['request'].GET.copy()
            if self.page_name in query:
                del query[self.page_name]
            query_string = query.urlencode() + '&'
            form_input_string = u''.join([u'<input type="hidden" name="%s" value="%s">' % (k, conditional_escape(v)) for k, l in query.lists() for v in l])
        else:
            query_string = u''
            form_input_string = u''
        context.update({
            'token':self.token,
            'page_name': self.page_name,
            'query_string': query_string,
            'form_input_string': mark_safe(form_input_string),
        })
        result = template.loader.get_template('common_utils/paginator.html').render(context)
        context.pop()
        return result

@register.tag
def paginator(parser, token):
    '''
        Выводит навигатор по страницам. Данные берет из контекста в том же
        виде, как их туда передает generic view "object_list".
        {{ paginator }}
        Если используется более одного на странице, надо указывать уникальный
        token для корректной работы label-ов.
        {{ paginator 'bottom_id' }}
    '''
    contents = token.split_contents()
    tag_name = contents[0]
    length=len(contents)
    if length == 2:
        uniquie_id = contents[1]    
        if not (uniquie_id[0] == uniquie_id[-1] and uniquie_id[0] in ('"', "'")):
            raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name
        uniquie_id = uniquie_id.strip('\'"')
    elif length == 1:
        uniquie_id = ''
    else:
        raise template.TemplateSyntaxError, "'%s' tag requires less than or equal to one argument."%tag_name
    return PaginatorNode(token=uniquie_id)
